package com.rritw.webtools.util;

import com.rritw.webtools.common.PageResult;

public abstract class PageUtil {

    /**
     * 根据传入的当前是页码，文章在页面上以<font color=red><b>倒序的</b></font>方式展示内容，展示内容的规则将按如下的规则：<br>
     * 如果有40条记录，每页展示15条记录，则有3页，当page为1的时候，实际上要显示第3页的内容：3+1-1，实际显示的记录数应该是25到39(数据库是从0开始)，共15条记录，此时的offset应该为25；<br>
     * 如果有40条记录，每页展示15条记录，则有3页，当page为2的时候，实际上要显示第2页的内容：3+1-2，实际显示的记录数应该是10到24，共15条记录，此时的offset应该为10；<br>
     * 如果有40条记录，每页展示15条记录，则有3页，当page为3的时候，实际上要显示第1页的内容：3+1-3，实际显示的记录数应该是0到9，共10条记录，此时的offset应该为0；<br>
     * 如果有40条记录，每页展示15条记录，则有3页，当page为4的时候，实际上是不会有内容，此时返回查询结果数为0；<br>
     * 
     * @param currentPage 当前查询的页数
     * @param pageSize 每页显示的最多内容数
     * @param totalCount 数据库中总共的记录数
     * @return 当前应该开始查询偏移量
     */
    public static PageResult getPageResult(int currentPage, int pageSize, int totalCount) {
        PageResult pageResult = new PageResult();
        pageResult.setCurrentPage(currentPage);

        if (totalCount == 0) {
            return pageResult;
        }
        pageResult.setTotalCount(totalCount);

        /**
         * Calculate total pages
         */
        int mod = totalCount % pageSize;
        int totalPages = totalCount / pageSize;
        if (mod > 0) {
            totalPages++;
        }
        pageResult.setTotalPages(totalPages);

        if (currentPage > totalPages) {// 如果当前页面大于了总页数，是查不出来数据的，如这里用户输入页码为4时，是不会有结果的，直接返回0记录
            pageResult.setOffset(0);
            pageResult.setPageSize(0);
            return pageResult;
        }

        int offset = totalCount - currentPage * pageSize;
        if (offset < 0) {
            offset = 0;
        }
        pageResult.setOffset(offset);

        if (offset == 0) {
            pageResult.setPageSize(totalCount - ((currentPage - 1) * pageSize));
        } else {
            pageResult.setPageSize(pageSize);
        }
        return pageResult;
    }
}
